package interfaces.model;

/**
 * The board is a singleton that can have any size and dimension. It acts as
 * the controller in our MVC pattern, connecting our CellAI with CellDrawer.
 * 
 * @author Eli Fatsi
 *
 */
public interface Board {

	/**
	 * Called at the start of the automation to obtain the initial board.
	 * 
	 * @return Board
	 */
	public Board getBoard();
	
	/**
	 * Allows the developer to set (and change) the dimensions of the 
	 * automaton board. Returns true if succeeded.
	 * 
	 * @param dimensions
	 */
	public boolean setDimensions(int[] dimensions);
	
	/**
	 * Refreshes the board after setDimensions has been called.
	 */
	boolean refreshBoard();
	
	/**
	 * Calls upon the cells one by one to consider there surroundings
	 * and act according to the rules in place. This is basically a step.
	 * Returns true if succeeded.
	 */
	public boolean makeAct();
}
